package com.wz.common.bas.taskNoUtils.service.impl;


import java.util.List;


import com.wz.common.bas.taskNoUtils.domain.BasTaskNo;
import com.wz.common.bas.taskNoUtils.mapper.BasTaskNoMapper;
import com.wz.common.bas.taskNoUtils.service.IBasTaskNoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wz.common.utils.text.Convert;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

/**
 * 任务号Service业务层处理
 * 
 * @author qxq
 * @date 2021-11-05
 */
@Service
public class BasTaskNoServiceImpl implements IBasTaskNoService
{
    @Autowired
    private BasTaskNoMapper basTaskNoMapper;


    @Autowired
    private PlatformTransactionManager transactionManager;

    /**
     * 查询任务号
     * 
     * @param id 任务号ID
     * @return 任务号
     */
    @Override
    public BasTaskNo selectBasTaskNoById(String id)
    {
        return basTaskNoMapper.selectBasTaskNoById(id);
    }

    /**
     * 查询任务号列表
     * 
     * @param basTaskNo 任务号
     * @return 任务号
     */
    @Override
    public List<BasTaskNo> selectBasTaskNoList(BasTaskNo basTaskNo)
    {
        return basTaskNoMapper.selectBasTaskNoList(basTaskNo);
    }

    /**
     * 新增任务号
     * 
     * @param basTaskNo 任务号
     * @return 结果
     */
    @Override
    public int insertBasTaskNo(BasTaskNo basTaskNo)
    {
        return basTaskNoMapper.insertBasTaskNo(basTaskNo);
    }

    /**
     * 修改任务号
     * 
     * @param basTaskNo 任务号
     * @return 结果
     */
    @Override
    public int updateBasTaskNo(BasTaskNo basTaskNo)
    {
        return basTaskNoMapper.updateBasTaskNo(basTaskNo);
    }

    /**
     * 删除任务号对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteBasTaskNoByIds(String ids)
    {
        return basTaskNoMapper.deleteBasTaskNoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除任务号信息
     * 
     * @param id 任务号ID
     * @return 结果
     */
    @Override
    public int deleteBasTaskNoById(String id)
    {
        return basTaskNoMapper.deleteBasTaskNoById(id);
    }

    /**
     * 获取任务号
     * @param
     * @return
     */
    public long getTaskNo(String id){
        //2、获取默认事务定义
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        // 设置事务传播行为  不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        //3、根据事务定义对象设置的属性，获取事务状态
        TransactionStatus status = transactionManager.getTransaction(def);

        BasTaskNo basTask = basTaskNoMapper.getTaskNo(id);
        Long taskNo = basTask.getTaskNo();
        Long min = basTask.getMinNo();
        Long max = basTask.getMaxNo();
        Long num =Long.valueOf(0);
        if (taskNo > min - 1 && taskNo < max) {
            num = taskNo + 1;
        }
        if (taskNo < min || taskNo >= max) {
            num = min;
        }
        basTaskNoMapper.updateTaskNo(id,num);
        //4 事物提交
        transactionManager.commit(status);
        return taskNo;
    }


}
